/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.openide.util.enum;
import java.util.Enumeration;
/** Composes more enumerations into one.
*
* @author Jaroslav Tulach
* @version 0.10, Apr 07, 1998
*/
public class SequenceEnumeration extends Object implements Enumeration {
/** enumeration of Enumerations */
private Enumeration en;
/** current enumeration */
private Enumeration current;
/** Constructs new enumeration from already existing. The elements
* of <CODE>en</CODE> should be also enumerations. The resulting
* enumeration contains elements of such enumerations.
*
* @param en enumeration of Enumerations that should be sequenced
*/
public SequenceEnumeration (Enumeration en) {
this.en = en;
}
/** Composes two enumerations into one.
* @param first first enumeration
* @param second second enumeration
*/
public SequenceEnumeration (Enumeration first, Enumeration second) {
this (new ArrayEnumeration (new Enumeration[] { first, second }));
}
/** Ensures that current enumeration is set.
* @return the current enumeration or null if there is no next enumeration
*/
private Enumeration ensureCurrent () {
while (current == null || !current.hasMoreElements ()) {
if (en.hasMoreElements ()) {
current = (Enumeration)en.nextElement ();
} else {
// no next valid enumeration
return null;
}
}
return current;
}
/** @return true if we have more elements */
public boolean hasMoreElements () {
return ensureCurrent () != null;
}
/** @return next element
* @exception NoSuchElementException if there is no next element
*/
public synchronized Object nextElement () {
if (ensureCurrent () != null) {
return current.nextElement ();
} else {
throw new java.util.NoSuchElementException ();
}
}
}
/*
* Log
* 4 Gandalf 1.3 10/22/99 Ian Formanek NO SEMANTIC CHANGE - Sun
* Microsystems Copyright in File Comment
* 3 Gandalf 1.2 6/8/99 Ian Formanek ---- Package Change To
* org.openide ----
* 2 Gandalf 1.1 1/5/99 Ian Formanek
* 1 Gandalf 1.0 1/5/99 Ian Formanek
* $
*/